Unix Domain Sockets এর ধারণা এবং প্রয়োগ

Computer Programming - ইউনিক্স সকেট (Unix Socket) Unix Domain Sockets (Unix Domain Sockets) |
235
235

Unix Domain Sockets (UDS) হলো একটি Inter-Process Communication (IPC) মেকানিজম, যা একই মেশিনের (সিস্টেমের) মধ্যে চলমান প্রক্রিয়াগুলোর মধ্যে দ্রুত এবং কার্যকরভাবে ডেটা আদান-প্রদান করতে ব্যবহৃত হয়। এটি TCP/IP স্যুট-এর বিকল্প হিসেবে ব্যবহৃত হয়, যেখানে প্রক্রিয়াগুলো নেটওয়ার্ক প্রোটোকল ব্যবহার না করে লোকালি যোগাযোগ করে। UDS প্রোটোকলটি সাধারণত AF_UNIX বা AF_LOCAL নামে পরিচিত এবং এটি লোকালহোস্টের মধ্যে প্রক্রিয়াগুলোর মধ্যে যোগাযোগের জন্য আদর্শ।

Unix Domain Sockets এর বৈশিষ্ট্য

  1. লোকাল যোগাযোগ:
    • UDS শুধুমাত্র একই মেশিন বা সিস্টেমের মধ্যে প্রক্রিয়াগুলোর মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়। এটি নেটওয়ার্কের বাইরে থাকে এবং দ্রুত ডেটা ট্রান্সমিশন নিশ্চিত করে।
  2. ফাইল সিস্টেমের ওপর ভিত্তি করে:
    • UDS লোকাল ফাইল সিস্টেমের মাধ্যমে কাজ করে, যেখানে সিস্টেমের মধ্যে একটি সুনির্দিষ্ট পাথ বা ফাইল তৈরির মাধ্যমে যোগাযোগের চ্যানেল তৈরি করা হয়।
  3. নেটওয়ার্ক প্রোটোকলের বিকল্প:
    • TCP/IP প্রোটোকলের মতো নেটওয়ার্ক স্ট্যাক ব্যবহার না করে UDS লোকাল সংযোগের জন্য কাজ করে। এটি প্রক্রিয়াগুলোর মধ্যে দ্রুত এবং কম ওভারহেডের সাথে ডেটা পাঠাতে সহায়ক।
  4. Socket Types:
    • UDS দুটি প্রধান Socket টাইপ সমর্থন করে:
      • SOCK_STREAM: TCP-এর মতো ধারাবাহিক এবং নির্ভরযোগ্য স্ট্রিম যোগাযোগ।
      • SOCK_DGRAM: UDP-এর মতো ডাটাগ্রাম ভিত্তিক দ্রুত যোগাযোগ।
  5. তরঙ্গ কম এবং দ্রুত (Low Latency):
    • UDS সিস্টেম কলের মাধ্যমে কাজ করে, যা নেটওয়ার্ক স্ট্যাকের চেয়ে কম লেটেন্সি এবং দ্রুত পারফরম্যান্স প্রদান করে।

Unix Domain Sockets এর প্রয়োগ

Unix Domain Sockets ব্যবহার করে লোকাল প্রক্রিয়াগুলোর মধ্যে IPC প্রয়োগ করা যায়। UDS বিভিন্ন অ্যাপ্লিকেশন এবং সার্ভিসে ব্যবহৃত হয়, যেমন ডাটাবেস সার্ভার, ডেমন, এবং সিস্টেম সার্ভিস, যেগুলো একই সিস্টেমের মধ্যে দ্রুত যোগাযোগের প্রয়োজন হয়।

Unix Domain Socket Server এবং Client প্রোগ্রাম উদাহরণ (C ভাষায়)

নিচে একটি উদাহরণ দেওয়া হলো যেখানে Unix Domain Sockets ব্যবহার করে একটি সার্ভার এবং ক্লায়েন্ট তৈরি করা হয়েছে:

1. Unix Domain Socket Server Program (C ভাষায়)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH "/tmp/uds_socket"

int main() {
    int server_fd, client_fd;
    struct sockaddr_un server_addr, client_addr;
    socklen_t client_len;
    char buffer[100];
    
    // 1. Socket তৈরি করা
    if ((server_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }
    
    // 2. ঠিকানা সেটআপ করা
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sun_family = AF_UNIX;
    strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);

    // 3. Binding করা
    unlink(SOCKET_PATH);
    if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Bind failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }
    
    // 4. Listening করা
    if (listen(server_fd, 5) < 0) {
        perror("Listen failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    printf("Server is listening...\n");

    client_len = sizeof(client_addr);
    // 5. Accepting সংযোগ
    if ((client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_len)) < 0) {
        perror("Accept failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    // 6. ডেটা গ্রহণ করা
    int n = read(client_fd, buffer, sizeof(buffer));
    buffer[n] = '\0';
    printf("Client: %s\n", buffer);

    // 7. ডেটা পাঠানো
    write(client_fd, "Hello from server", 17);

    // 8. Socket বন্ধ করা
    close(client_fd);
    close(server_fd);
    unlink(SOCKET_PATH);

    return 0;
}

2. Unix Domain Socket Client Program (C ভাষায়)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH "/tmp/uds_socket"

int main() {
    int client_fd;
    struct sockaddr_un server_addr;
    char buffer[100];

    // 1. Socket তৈরি করা
    if ((client_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 2. সার্ভার ঠিকানা সেটআপ করা
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sun_family = AF_UNIX;
    strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);

    // 3. সার্ভারের সাথে সংযোগ স্থাপন করা
    if (connect(client_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Connection failed");
        close(client_fd);
        exit(EXIT_FAILURE);
    }

    // 4. ডেটা পাঠানো
    write(client_fd, "Hello from client", 17);

    // 5. ডেটা গ্রহণ করা
    int n = read(client_fd, buffer, sizeof(buffer));
    buffer[n] = '\0';
    printf("Server: %s\n", buffer);

    // 6. Socket বন্ধ করা
    close(client_fd);

    return 0;
}

প্রোগ্রামের বিশ্লেষণ

Server Program:

  1. Socket তৈরি: socket() ফাংশন AF_UNIX এবং SOCK_STREAM দিয়ে Socket তৈরি করে।
  2. Binding: Unix ফাইল সিস্টেমের একটি পাথ (SOCKET_PATH) দিয়ে Socket-কে বেঁধে দেয়।
  3. Listening: listen() ফাংশন সার্ভারকে ইনকামিং সংযোগের জন্য অপেক্ষা করায়।
  4. Accepting: accept() ফাংশন ইনকামিং সংযোগ গ্রহণ করে।
  5. ডেটা পাঠানো এবং গ্রহণ: read() এবং write() ফাংশন ক্লায়েন্ট থেকে ডেটা গ্রহণ এবং ক্লায়েন্টে ডেটা পাঠানোর জন্য ব্যবহৃত হয়।

Client Program:

  1. Socket তৈরি: socket() ফাংশন AF_UNIX এবং SOCK_STREAM দিয়ে ক্লায়েন্টের Socket তৈরি করে।
  2. Server ঠিকানা সেটআপ: সার্ভারের ঠিকানা (পাথ) সেট করা হয়।
  3. Connection: connect() ফাংশন সার্ভারের সাথে সংযোগ স্থাপন করে।
  4. ডেটা পাঠানো এবং গ্রহণ: write() এবং read() ফাংশন ডেটা পাঠানো এবং গ্রহণের জন্য ব্যবহৃত হয়।

Unix Domain Sockets এর সুবিধা

  1. দ্রুত এবং কার্যকর যোগাযোগ:
    • TCP/IP প্রোটোকলের চেয়ে দ্রুত, কারণ নেটওয়ার্ক স্ট্যাক ব্যবহার না করে সিস্টেম কলের মাধ্যমে কাজ করে।
  2. নিরাপত্তা:
    • UDS শুধুমাত্র লোকাল সিস্টেমে কাজ করে, তাই নেটওয়ার্ক ভিত্তিক আক্রমণ থেকে সুরক্ষিত থাকে।
  3. কম ওভারহেড:
    • TCP/IP কানেকশন সেটআপের ওভারহেড নেই, যা দ্রুত IPC নিশ্চিত করে।

সীমাবদ্ধতা

  1. লোকাল সীমাবদ্ধতা:
    • UDS শুধুমাত্র একই সিস্টেমের মধ্যে কাজ করে, তাই এটি দূরবর্তী প্রক্রিয়াগুলোর মধ্যে যোগাযোগ করতে অক্ষম।
  2. ফাইল সিস্টেমের ওপর নির্ভরশীলতা:
    • UDS পাথ বা ফাইল সিস্টেমের ওপর নির্ভর করে কাজ করে, যা ফাইল সিস্টেমের সমস্যা বা পারমিশন সংক্রান্ত সমস্যার সম্মুখীন হতে পারে।
common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion